<?php
namespace app\api\controller;

use beecloud\rest\api as BCRESTApi;
// 支付接口
class Pay extends Base
{
    protected $app = null;
    public function _initialize()
    {
        BCRESTApi::registerApp(config('beecloud.app_id'),
                               config('beecloud.test_secret'),
                               /*config('beecloud.app_secret'), 
                               config('beecloud.master_secret')*/
                               );
        BCRESTApi::setSandbox(true);
    }

    // 国内支付
    public function pay()
    {
        try {
            $data = array(
                'timestamp' => time() * 1000,
                'channel' => 'ALI_WAP', //渠道类型
                'title' => '支付宝移动网页支付测试',   //订单标题
                'bill_no' => "bcdemo" . time(),    //订单编号
                'total_fee' => 1, //订单金额(int 类型) ,单位分
                //use_app非必填参数,boolean型,是否使用APP支付,true使用,否则不使用
                //'use_app' => true;
                'return_url' => 'https://beecloud.cn', //渠道类型:ALI_WEB、ALI_QRCODE、UN_WEB、JD_WAP、JD_WEB时为必填
                'bill_timeout' => 360, //京东(JD*)不支持该参数
            );
            $result = \beecloud\rest\api::bill($data);
            //不使用namespace的用户
            //$result = BCRESTApi::bill($data);
            if(isset($result->url)){
                header("Location:$result->url");
            }else if(isset($result->html)) {
                echo $result->html;
            }
        } catch (Exception $e) {
            echo $e->getMessage();
        }
       // BCRESTApi::bill();
    }

    public function transfer()
    {
        $channel = '';
        switch ($channel) {
            case 'ALI_TRANSFER':
                return $this->alitrans();
                break;
            case 'WX_TRANSFER':
                return $this->wxtrans();
                break;
            default:
                $bill_no       = input('order_no');// 订单编号
                $total_fee     = input('total_fee');// 订单金额
                $bank_fullname = input('bank'); // 银行全称
                $card_type     = "DE"; //银行卡类型,区分借记卡和信用卡，DE代表借记卡，CR代表信用卡，其他值为非法 
                $account_type  = "P"; //帐户类型，P代表私户，C代表公户，其他值为非法
                $account_no    = "6222691921993848888";   //收款方的银行卡号
                $account_name  = "test"; //收款方的姓名或者单位名
                //选填mobile
                $mobile        = ""; //银行绑定的手机号
                return $this->bctrans($bill_no,$total_fee,$bank_fullname,$card_type,$account_type,$account_no,$account_name,$mobile);
                break;
        }
    }

    // 支付订单查询
    public function query()
    {
        // 多条记录的查询调用方法
       BCRESTApi::bills(array $data);

       //根据ID查询调用的方法
       BCRESTApi::bill(array $data, 'get');
    }

    // 发起退款
    public function refund()
    {
        BCRESTApi::refund(array $data);
    }

    public function webhooks()
    {
        
    }

    function verify_signature($raw_data, $signature, $pub_key_path) 
    {
       
    }

    private function alitrans()
    {
        try 
        {
            $data = array(
                'timestamp' => time() * 1000,
                'channel' => 'ALI_TRANSFER',
                'title' => '支付宝企业打款',   //订单标题
                'transfer_no' => "bcdemo" . time(),    //打款单号
                'total_fee' => 1, //订单金额(int 类型) ,单位分
                //收款方的id 账号和 名字也需要对应
                'channel_user_id' => '',   //收款人账户
                'channel_user_name' => '', //收款人账户姓名
                'account_name' => '苏州比可网络科技有限公司' //注意此处需要和企业账号对应的全称
            );
            $result = \beecloud\rest\api::transfers($data);
            //不使用namespace的用户
            //$result = BCRESTApi::transfers($data);
            if ($result->result_code != 0) {
                print_r($result);
                exit();
            }
            if(isset($result->url)){
                header("Location:$result->url");
            }
        } catch (Exception $e) {
            echo $e->getMessage();
        }

    }

    private function wxtrans()
    {
        try {
            $data = array(
                'timestamp' => time() * 1000,
                'channel' => 'WX_TRANSFER',
                'title' => '微信企业打款',   //订单标题
                'transfer_no' => "bcdemo" . time(),    //打款单号
                'total_fee' => 1, //订单金额(int 类型) ,单位分
                'channel_user_id' => 'o3kKrjlROJ1qlDmFdlBQA95zxxx'   //微信openid
            );
            $result = \beecloud\rest\api::transfer($data);
            //不使用namespace的用户
            //$result = BCRESTApi::transfer($data);
            if ($result->result_code != 0) {
                print_r($result);
                exit();
            }
            echo ' 打款成功';
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    private function bctrans()
    {
        try {
            $data = array(
                'timestamp' => time() * 1000,
                'title' => '企业打款测试',   //订单标题
                'bill_no' => "bcdemo" . time(),    //订单编号
                'total_fee' => 1, //订单金额(int 类型) ,单位分
                'trade_source' => 'OUT_PC' //交易源, UTF8编码格式，目前只能填写OUT_PC
                /*
                 *  如果未能确认银行的全称信息,可通过下面的接口获取并进行确认
                 *  //P_DE:对私借记卡,P_CR:对私信用卡,C:对公账户
                 *  $banks = \beecloud\rest\api::bc_transfer_banks(array('type' => 'P_DE'));
                 *  if ($result->result_code != 0) {
                 *      print_r($result);
                 *      exit();
                 *  }
                 *  print_r($banks->bank_list);die;
                 */
                'bank_fullname' => "中国银行"; //银行全称
                'card_type' => "DE"; //银行卡类型,区分借记卡和信用卡，DE代表借记卡，CR代表信用卡，其他值为非法
                'account_type' => "P"; //帐户类型，P代表私户，C代表公户，其他值为非法
                'account_no' => "6222691921993848888";   //收款方的银行卡号
                'account_name' => "test"; //收款方的姓名或者单位名
                //选填mobile
                'mobile' => ""; //银行绑定的手机号
            );
            $result = \beecloud\rest\api::bc_transfer($data);
            //不使用namespace的用户
            //$result = BCRESTApi::bc_transfer($data);
            if ($result->result_code != 0) {
                print_r($result);
                exit();
            }
            echo ' 打款成功';
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
} 